package com.example.house

import androidx.activity.viewModels
import androidx.appcompat.widget.SearchView
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.blankj.utilcode.util.ToastUtils
import com.example.common.view.view.BaseMvvmActivity
import com.example.house.adapter.HouseManngerAdapter
import com.example.house.databinding.ActivityHouseManngerBinding
import com.example.house.vm.HouseViewModel
import dagger.hilt.android.AndroidEntryPoint

/**
 * 房屋管理页面Activity
 * 该Activity用于展示房屋列表，并支持通过搜索框筛选数据。
 * 使用MVVM架构，结合ViewModel和RecyclerView展示数据。
 */
@AndroidEntryPoint
@Route(path = "/house/HouseManngerActivity")
class HouseManngerActivity : BaseMvvmActivity<ActivityHouseManngerBinding>() {

    /**
     * 获取当前Activity的布局资源ID
     * @return 布局资源ID，对应R.layout.activity_house_mannger
     */
    override fun getLayoutId(): Int = R.layout.activity_house_mannger

    // 房屋管理适配器实例
    val houseManngerAdapter = HouseManngerAdapter()

    // 搜索关键字
    var name: String = ""

    // 房屋ViewModel实例，通过委托延迟加载
    private val houseViewModel: HouseViewModel by viewModels()

    /**
     * 初始化界面组件和数据监听
     * 包括：
     * - 设置搜索框查询监听器
     * - 配置RecyclerView的适配器和布局管理器
     * - 请求初始数据
     * - 监听ViewModel的数据成功和错误回调
     */
    override fun initView() {
        super.initView()
        // 设置搜索框查询监听器
        mDataBinding.sv.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            /**
             * 当用户提交搜索查询时触发
             * @param query 用户输入的查询文本
             * @return 是否消费该事件
             */
            override fun onQueryTextSubmit(query: String?): Boolean {
                if (query != null) {
                    name = query
                    houseViewModel.getListDataAll()
                }
                return false
            }
            /**
             * 当搜索框中文本发生变化时触发
             * @param newText 当前输入的新文本
             * @return 是否消费该事件
             */
            override fun onQueryTextChange(newText: String?): Boolean {
                if (newText != null) {
                    name = newText
                    houseViewModel.getListDataAll()
                }
                return false
            }
        })

        // 配置RecyclerView
        mDataBinding.rv.adapter = houseManngerAdapter
        mDataBinding.rv.layoutManager = LinearLayoutManager(this)

        // 请求初始数据
        houseViewModel.getListDataAll()

        // 监听数据成功回调并更新UI
        houseViewModel.mSuccessLiveData.observe(this) {
            houseManngerAdapter.data.clear()
            if (name.isNullOrEmpty()) {
                // 无搜索条件时显示全部数据
                houseManngerAdapter.data.addAll(it.data)
            } else {
                // 根据企业名称过滤数据
                houseManngerAdapter.data.addAll(it.data.filter { item -> item.enterpriseName.contains(name) })
            }
            houseManngerAdapter.notifyDataSetChanged()
        }

        // 监听错误回调并提示用户
        houseViewModel.mErrorLiveData.observe(this) {
            ToastUtils.showLong(it)
        }
    }
}
